Xamarin

xama 는 사마? 자마? 욘사마? 욘자마?

최근에 MS가 Xamarin을 인수하면서 오픈소스로 풀어버렸죠. 경쟁할만한 플랫폼으로 React-native 가 뜨고 있던 상황에서 만만치 않은 개발 풀을 가지고 있는 C#진영의 크로스 플랫폼이 진격을 시작했습니다.

오늘은 이 Xamarin을 간단하게 리뷰해볼까 합니다.

2016/05/18 Editor’s choice

Xamarin
_GitHub is where people build software. More than 14 million people use GitHub to discover, fork, and contribute to over…_github.com

Xamarin 이 뭐여.

처음 들어보신 분들도 있으리라 확신합니다.

시작은 Mono 부터

시작부터 창대

이건 또 뭐여.

Mono 는 원래 Ximian(Gnome) 에서 시작해서 Novell을 거쳐서 지속된 프로젝트로 Ecma 스탠다드에 부합하는 .Net Framework 호환 세트를 만들던 오픈 소스 그룹이며 거기에 속한 개발자들이 Xamarin을 세웠고 지금은 Microsoft 산하에 존재하게 되었습니다.

원래 Gnome, Novell에 속했던 사람들이 Xamarin 홀로는 오픈소스가 아니었다가 MS 산하가 되면서 오픈 소스로 전환이 된 것은 어쩌면 MS 보다 Xamarin 쪽의 생각이었을 수도 있겠다는 생각이 듭니다. (이제 앵벌이 할 필요가 …?)

Mono는 기본적으로 크로스 플랫폼을 지향했기 때문에 Linux 대부분 계열과 심지어는 PS3, Wii, XBox360에서도 돌아가기도 합니다.

한줄정리 : .Net을 크로스 플랫폼에서 돌아가게 하기 위한 오픈 소스. 처음에는 Mono 만 오픈소스라 리차드 스톨만같은 법사가 쓰면 안된다고 극구 반대했으나 쩜넷을 오픈 소스화 하면서 의혹의 눈초리는 걷힌 상황

자바와는 다르다. 자바와는!

이미지 출처 : 나무 위키 건담 자쿠와는 다르다! 자쿠와는 항목

뭔가 덕후같은 장면을 보셨다면 그것은 오해입니다.(덕후 눈에는 덕후만 보이는 법)

아키텍쳐

이미지 출처 : 위키피디아 모노 항목

다르긴 뭐가 달라. 한개도 안빼고 똑같아요. (만든 놈이 다름.)

성능이 다름.

.Net4.5 vs Java8 관련된 부분은 갑론을박이 엄청나게 진해되고 있으니까 제가 말을 더 얹어서 헬게이트를 열 생각은 없습니다만 일단은 Xamarin측 주장이라고만 해 두죠

Syntax가 다름

.Net 이 여러모로 진보한 언어의 강점을 아직은 취하고 있습니다만..

(Java8은 다르다!)


서론이 긴 걸 보니

잘 모르는군요. 네 맞습니다. 자알못입니다.

하지만 개발자는 코드로 얘기합시다.

먼저 자마린 스튜디오를 다운받아 봅시다.

https://www.xamarin.com

빨간 약과 파란 약이 있습니다

Mac에서 받을 때는 Xamarin Studio, Windows 에서 받을 때에는 Visual Studio. 응? (심지어는 windows 용 iOS 에뮬레이터를 제공! https://developer.xamarin.com/guides/cross-platform/windows/ios-simulator/)

저는 Mac이라 일단 Xamarin Studio를 받아 봅니다.

받아 보면 이렇게 생겼군요.

프로젝트를 만들어 봅시다.

파일 -> 새로만들기 -> 솔루션 을 선택하면 다음과 같은 내용의 다이알로그가 나옵니다.

고를 수 있는 메뉴가 생각보다 많습니다.

일단 대분류부터 살펴보면 다음과 같습니다.

  • Cross platform
  • iOS
  • Android
  • Mac

Cross Platform 은 Xamarin.Forms라는 API 들을 사용하게 되어 있고, iOS는 Xamarin.iOS, android는 Xamarin.android 의 API 들을 사용할 수 있습니다.

API Documentation - Xamarin
_Xamarin Test Cloud Find bugs before your users do_developer.xamarin.com

한번 궁금해서 API 소개가 어느정도 나와 있을까 생각해서 iOS용 CoreLocation 네임스페이스의 CLGeoCoder를 살펴 보았습니다.

깨알같은 API 하악

명불허전 MS라 불러야할지 원래 자마린이 저랬는지는 모르겠으나 MSDN급의 예제까지 나오는 기염을 토하고 있습니다( 보고 있냐 React-native! )

그나 저나 느낌상으로는 iOS 대부분의 API들을 대응하는 C# API들이 있는 거 같습니다. (뭐야 이거 무섭잖아)


각설하고! 먼저 Cross Platform으로 프로젝트를 만들어 보겠습니다.

com.companyname의 네임스페이스를 가지는 TechX용 프로젝트를 가져보겠습니다

next의 향연

next

만들고 나니 이런 시시껄렁한 페이지가 나오는 군요

프로젝트 트리를 살펴보면

  • TechX
  • TechX.Droid
  • TechX.iOS

이렇게 세가지 분류가 나옵니다.

TechX.cs 파일이 “Welcome to Xamarin” 이길래 “어서와 TechX Forms! 이런 시시껄렁한 프로젝트는 처음이지?” 로 바꿔 보았습니다.

아직 에디터는 별로군요. 한글 입력에 문제가 많습니다. 2바이트 코드가 아마 다 같은 문제를 겪을 거 같습니다.

실행을 해 봐야죠.

안드로이드도 한번 실행해 볼까요? 기본으로 Mac 용 Xamarin 만 그런건지는 모르겠는데 Xamarin.Forms는 iOS 에뮬레이터를 기본으로 잡고 있습니다.

안드로이드 환경을 추가 하려고 해도 잘 안되는데 이런 경우는 실행하는 팁이 따로 있습니다.

당연히 AVD 처럼 디바이스 추가는 미리 되었다고 가정을 하면

.Droid 프로젝트에 마우스를 가져다 데고 실행을 하고 에뮬레이터를 선택하면 실행이 가능합니다.

에러는 지난 실행한 프로세스를 제가 죽이지 않아서 발생한 것 같습니다. 안드로이 배경은 어두운 색이 갑.

안드로이드 스튜디오 에뮬레이터를 본거 같은데?

맞습니다. 안드로이드 에뮬레이터를 선택해도 그 쪽으로 빌드가 가능하고, xamarin이 제공하는 에뮬레이터도 따로 있습니다(player 라고 함)

의미

상당히 잘 정리가 되었고 잘 만들어진 프레임워크가 눈앞에 있고, 우리는 아직은 약간 부족해 보이지만 굉장히 가능성 있는 미래를 눈앞에 두고 있다고 생각하면 전 우주가 우리를 도와 줄 것입니다.

By Keen Dev on May 17, 2016.

Exported from Medium on May 31, 2017.